package com.qujia.framework.constant;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zph
 * @Desc: 服务上下文
 * @since 2022-07-11
 */
@Data
public class ServiceContext {

    /**
     * 扩展属性KEY
     */
    public static final String EXT_KEY_PREFIX = "x-ext-";

    /**
     * 请求ID
     */
    private String requestId;
    /**
     * 实例ID
     */
    private String instanceId;
    /**
     * 租户ID
     */
    private String tenantId;
    /**
     * 应用ID
     */
    private String applicationId;
    /**
     * 用户ID
     */
    private String userId;
    /**
     * 登录名
     */
    private String loginName;
    /**
     * 真实ip地址
     */
    private String realIp;
    /**
     * 扩展属性
     */
    private Map<String, String> extMap = new HashMap<>();

    public void putExtValue(String key, String value) {
        if (StringUtils.isBlank(key) || StringUtils.isBlank(value)) {
            return;
        }
        extMap.put(getExtKey(key), value);
    }

    public String getExtValue(String key) {
        if (StringUtils.isBlank(key)) {
            return null;
        }
        return extMap.get(getExtKey(key));
    }

    public void removeExtValue(String key) {
        if (StringUtils.isBlank(key)) {
            return;
        }
        extMap.remove(getExtKey(key));
    }

    private String getExtKey(String key) {
        if (StringUtils.isBlank(key)) {
            return StringUtils.EMPTY;
        }
        if (key.startsWith(ServiceContext.EXT_KEY_PREFIX)) {
            return key;
        }
        return EXT_KEY_PREFIX + key;
    }
}
